package com.husky.easyexcle.listener;

/**
 * @author huanfuan
 * @date 2023/5/28 17:51
 */

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * 不能交给spring管理，每次读取都要new
 *
 * @date 12/23/2020 18:52
 */
@Slf4j
@Data
public class LunchDataListenerMultiSheetForCSDN extends AnalysisEventListener<Map<Integer, String>> {

    private List<List<String>> dataList;

    public LunchDataListenerMultiSheetForCSDN() {
        this.dataList = new ArrayList<>();
    }


    /**
     * 每读到一行数据都调用invoke方法
     *
     * @param integerObjectMap
     * @param context
     */
    @Override
    public void invoke(Map<Integer, String> integerObjectMap, AnalysisContext context) {
        Integer rowIndex = context.readRowHolder().getRowIndex();
        System.out.println("rowIndex = " + rowIndex);
        // key为列号，value为单元格的内容
        log.info("解析到数据:{}", integerObjectMap);
        // 把数据放到dataList里面，便于统一处理
        LinkedList<String> strings = new LinkedList<>();
        integerObjectMap.forEach((k,v) -> {
            strings.add(v);
        });
        this.dataList.add(strings);
    }


    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 读完所有数据，做统一处理。
        // 当然还可以拿到listener之外处理
        log.info("数据读取完成");
    }

}
